package br.edu.fcsl.persistencia;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import javax.servlet.http.HttpSession;

import org.apache.catalina.Session;

import br.edu.fcsl.entidade.Produto;

public class ProdutoDAO {
	private Connection conexao;
	private String sqlSalvar = "INSERT INTO produto (descricao, unidade, valorUnitario) VALUES (?, ?, ?)";
	private String sqlAtualizar = "UPDATE produto SET descricao = ?, unidade = ?, valorUnitario = ? WHERE id = ?";
	private String sqlExcluir = "DELETE FROM produto WHERE id = ?";
	private String sqlListar = "SELECT * FROM produto ORDER BY descricao";
	private String sqlId = "SELECT MAX(id) from produto";

	Connection conecta = new FabricaConexoes().getConnection();

	public void desconectar() {
		try {
			conecta.close();
			conecta = null;

		} catch (SQLException e) {
			e.printStackTrace();
		}
	}

	public boolean salvar(Produto xPro) {
		try {
			PreparedStatement ps = conecta.prepareStatement(sqlSalvar);
			ps.setString(1, xPro.getDescricao());
			ps.setString(2, xPro.getUnidade());
			ps.setDouble(3, xPro.getValorUnitario());
			ps.executeUpdate();

		} catch (SQLException e) {
			
			return false;
			
			
		}

		return true;
	}

	public boolean atualizar(Produto xPro) {
		// conectar();
		try {
			PreparedStatement ps = conecta.prepareStatement(sqlAtualizar);
			ps.setString(1, xPro.getDescricao());
			ps.setString(2, xPro.getUnidade());
			ps.setDouble(3, xPro.getValorUnitario());
			ps.setInt(4, xPro.getId());
			ps.executeUpdate();
		} catch (SQLException e) {
			e.printStackTrace();
		
			return false;
		
		} 
		
		return true;
		
	}

	public void excluir(Produto xPro) {
		// conectar();
		try {
			PreparedStatement ps = conecta.prepareStatement(sqlExcluir);
			ps.setLong(1, xPro.getId());
			ps.executeUpdate();
		} catch (SQLException e) {
			e.printStackTrace();
		}
//		if (conecta != null) {
//			{
//				desconectar();
//			}
//		}
	}

	public List<Produto> listar() {
		List<Produto> lista = new ArrayList<Produto>();
		// conectar();
		try {
			PreparedStatement ps = conecta.prepareStatement(sqlListar);
			ResultSet rs = ps.executeQuery();
			while (rs.next()) {
				Produto xPro = new Produto();
				xPro.setId(rs.getInt("id"));
				xPro.setDescricao(rs.getString("descricao"));
				xPro.setUnidade(rs.getString("unidade"));
				xPro.setValorUnitario(rs.getDouble("valorUnitario"));
				lista.add(xPro);
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
//		if (conecta != null) {
//			desconectar();
//		}
		return lista;

	}

	public long ultimo() {

		long valor = 0;
		PreparedStatement ps = null;

		Produto produto = new Produto();
		
		try {
			ps = conecta.prepareStatement(sqlId);

			ResultSet rs = ps.executeQuery();

			while (rs.next()) {
				produto.setId(rs.getInt("MAX(id)"));

				valor = produto.getId();

			}

		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

		return valor;

	}

}
